﻿namespace BlogsAPI.Sites
{
    using System;
    using System.Diagnostics;
    using Interfaces;
    using System.Text.RegularExpressions;
    using Abstract;

    /// <summary>
    /// Friendfeed.com, куплен <see cref="Facebook"/>
    /// </summary>
    /// <seealso cref="http://friendfeed.com/api/documentation"/>
    /// <remarks>remotekey: appid=runes230born</remarks>
    [BlogServiceAPI(Description = "http://friendfeed.com", IsMicroblog = true)]
    public class Friendfeed : BlogServer
    {
        private static readonly Regex Validation = new Regex(@"^http://(?:\w+\.)?friendfeed\.com",Regexoptions);
        private static readonly Regex ValidationFull = new Regex(@"^http://(?:[-_\w]+\.)?friendfeed\.com/(.*?)(?:/|$)", Regexoptions);

        #region interface: BlogServer

        /// <summary>
        /// Конструктор!
        /// </summary>
        public Friendfeed()
        {
        }

        /// <summary>
        /// проверка, является ли передаваемый урл чатью этого сервиса
        /// </summary>
        public override Boolean ValidateLink(String sLink)
        {
            return Validation.Match(sLink).Success;
        }


        /// <summary>
        /// Получение ссылки на блог блогера
        /// </summary>
        /// <param name="userName">ник блогера</param>
        public override String GetBlogLink(string userName)
        {
            return String.Format("http://friendfeed.com/{0}", userName);
        }

        /// <summary>
        /// проверка, является ли передаваемый урл чатью этого сервиса
        /// </summary>
        /// <param name="sLink">ссылка для проверки</param>
        /// <param name="userName">Имя пользователя на блогохостинге</param>
        /// <param name="bType">Тип блога - сообщество или блог</param>
        public override Boolean ValidateLink(String sLink, out String userName, out BlogType bType)
        {
            bType = BlogType.Unknown;
            userName = String.Empty;
            Match m = ValidationFull.Match(sLink);
            if (m.Success)
            {
                bType = BlogType.User;
                userName = m.Groups[1].ToString();
            }
            return m.Success;
        }

        /// <summary>
        /// Получение ссылки на блог блогера
        /// </summary>
        /// <param name="userName">ник блогера</param>
        /// <param name="btype">Тип блога - сообщество или блог</param>
        public override String GetBlogLink(string userName, BlogType btype)
        {
            return GetBlogLink(userName);
        }

        /// <summary>
        /// Получение ссылки на RSS блогера - берем старым способом... парся страницу целиком
        /// </summary>
        /// <param name="UserName">ник блогера</param>
        /// <remarks>Неработает если имя пользователя русское, тогда нужен номер</remarks>
        public override String GetRssLink(string UserName, BlogType btype)
        {
            return String.Format("http://friendfeed.com/{0}?format=atom", UserName);
        }

        /// <summary>
        /// Извлечение html кода Img аватарки для блога.
        /// </summary>
        /// <param name="userName">ник блогера</param>
        /// <param name="btype">Тип блога - сообщество или блог</param>
        /// <remarks>http://friendfeed-api.com/v2/picture/{0}?size=large</remarks>
        /// <seealso cref="http://friendfeed.com/api/documentation#read_picture"/>
        public override string ExtractAvatar(string userName, BlogType btype)
        {
            try
            {
                return String.Format("http://friendfeed-api.com/v2/picture/{0}?size=large", userName);
            }catch(Exception e1)
            {
                Debug.WriteLine("FF:ExtractAvatar "+e1.Message);
            }
            return base.ExtractAvatar(userName, btype);
        }

        #endregion
    }
}